package sistemasdistribuidos;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;


/** Classe que detecta todas as portas abertas de um determinado servidor
 * @author Rafael Neri
 * @author Helem Chaves
 * @author Airton Filho
 * @author Elizeu Rodrigues
 */
public class Sniffer {
    private ArrayList<Integer> portas = new ArrayList<Integer>();
  
    /**Responsável por verificar as portas de um servidor
     * @param ip Numero contendo o ip do servidor alvo
     * @return ArrayList Lista com a relação das portas que estão abertas
     */
    public ArrayList<Integer> executar(String ip){

        //percorre as portas. 1000 das 65536
        for(int i = 0; i < 1000; i++){
            try{
                
                //tenta abrir o socket na porta i, no servidor ip
                Socket cliente = new Socket();
                
                //Conecta o socket no servidor
                cliente.connect(new InetSocketAddress(ip,i),1);

                //adiciona a porta i a um arraylist
                portas.add(i);

            }
            catch(UnknownHostException e){
                //host desconhecido
            }
            catch(IOException e){
                //não possue serviço
            }
        }
        //retorna um arraylist com as portas
        return portas;
    }
}
